package com.xhj.mybatis.reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Executable;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * ParamNameUtil
 *
 * @author XJks
 * @description 工具类，用于获取方法的参数名称
 */
public class ParamNameUtil {

    /**
     * 获取构造函数的参数名列表
     *
     * @param constructor 构造函数对象
     * @return 参数名列表
     */
    public static List<String> getParamNames(Constructor<?> constructor) {
        // 调用私有方法，传入Constructor对象，返回参数名列表
        return getParameterNames(constructor);
    }

    /**
     * 获取方法的参数名列表
     *
     * @param method 方法对象
     * @return 参数名列表
     */
    public static List<String> getParamNames(Method method) {
        return getParameterNames(method);
    }

    /**
     * 私有方法，统一处理获取参数名的逻辑
     *
     * @param executable 方法或构造函数对象
     * @return 参数名列表
     */
    private static List<String> getParameterNames(Executable executable) {
        return Arrays.stream(executable.getParameters()).map(Parameter::getName).collect(Collectors.toList());
    }
}
